package modelo;

import static org.junit.Assert.*;
import geometria.Coordenada;

import org.junit.*;
import modelo.Velocidad;

public class MovimientosDeCoordenadasConVelocidad {

	@Test
	public void testMoverConociendoCoordenadas() {

		Velocidad v1 = new Velocidad(3D, 4D);
		Coordenada inicio = new Coordenada(1D, 1D);
		Coordenada destino = new Coordenada(31D, 41D);
		Coordenada intermedio = new Coordenada(7D, 9D);

		inicio.mover(destino, 2D, v1.getModulo());
		assertTrue(inicio.coincideCon(intermedio, 0D));

	}

	@Test
	public void testOtroMoverConociendoDosCoordenadasConMuchaVelocidad() {
		// Este test prueba que no importa el modulo de la velocidad,
		// cuando llegue a destino me voy a dejar de mover en ese sentido.
		Velocidad v1 = new Velocidad(400D, 400D);
		Coordenada inicio = new Coordenada(1D, 1D);
		Coordenada destino = new Coordenada(8D, 8D);
		inicio.mover(destino, 2D, v1.getModulo());
		assertTrue(inicio.coincideCon(destino, 1D));

	}

	// Los tests que siguen creo que ya no sirven

	@Test
	public void testMovimientoConVelocidad0() {
		Coordenada c1, c2;
		Velocidad v1;

		v1 = new Velocidad();
		c1 = new Coordenada(10D, 0D);
		c2 = c1.moverConVelocidad(v1, 3D);
		assertTrue(c1.coincideCon(c2, 0D));
	}

	@Test
	public void testMovimientoConTiempo0() {
		Coordenada c1, c2;
		Velocidad v1;

		v1 = new Velocidad(5D, 5D);
		c1 = new Coordenada(10D, 0D);
		c2 = c1.moverConVelocidad(v1, 0D);
		assertTrue(c1.coincideCon(c2, 0D));
	}

	@Test
	// TODO usar expected
	public void testMovimientoConTiempoNegativo() {
		Coordenada c1;
		Velocidad v1;

		v1 = new Velocidad(5D, 5D);
		c1 = new Coordenada(10D, 0D);
		try {
			c1.moverConVelocidad(v1, -1D);
			fail();
		} catch (TiempoInvalidoException e) {
			assertTrue(true);
		}
	}

	@Test
	public void testMovimientoConVelocidad() {
		Coordenada c1, c2;
		Velocidad v1;

		v1 = new Velocidad(10D, 5D);
		c1 = new Coordenada(20D, 30D);
		c2 = new Coordenada(50D, 45D);

		c1 = c1.moverConVelocidad(v1, 3D);
		assertTrue(c1.coincideCon(c2, 0D));
	}

	@Test
	public void testMovimientoConVelocidadConCoordenadaNegativa() {
		Coordenada c1, c2;
		Velocidad v1;
		v1 = new Velocidad(-10D, 5D);
		c1 = new Coordenada(20D, 30D);
		c2 = new Coordenada(10D, 35D);
		c1 = c1.moverConVelocidad(v1, 1D);
		assertTrue(c1.coincideCon(c2, 0D));
	}

}
